<template>
  <view class="content">
    <button @click="chooseJsonFile">选择 JSON 文件</button>
    <view class="result">
      <text>文件内容：{{ fileContent }}</text>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      fileContent: '未读取到内容'
    }
  },
  methods: {
    async chooseJsonFile() {
      this.fileContent = '读取中...';
      
      // 条件编译：根据平台选择不同方法
      // #ifdef APP-PLUS
      await this.chooseFileApp();
      // #endif
      
      // #ifdef H5
      await this.chooseFileH5();
      // #endif

      // 非APP和H5平台（如小程序）
      // #ifndef APP-PLUS || H5
      uni.showModal({
        title: '提示',
        content: '当前平台暂不支持此功能'
      });
      // #endif
    },

    // H5 环境选择文件
    chooseFileH5() {
      return new Promise((resolve) => {
        uni.chooseFile({
          count: 1,
          type: 'file',
          extension: ['.json'],
          success: (res) => {
            const file = res.tempFiles[0];
            const reader = new FileReader();
            reader.onload = (e) => {
              this.fileContent = e.target.result;
              console.log('H5 文件读取成功');
              resolve();
            };
            reader.onerror = () => {
              this.fileContent = '读取失败';
              resolve();
            };
            reader.readAsText(file);
          },
          fail: (err) => {
            console.error('H5 选择文件失败', err);
            this.fileContent = '选择文件失败';
            resolve();
          }
        });
      });
    },

    // App 环境选择文件
    chooseFileApp() {
      return new Promise((resolve) => {
        // 使用 plus.io API
        plus.io.chooseFile({
          title: '选择JSON文件',
          mimeType: 'application/json',
          success: (e) => {
            const filePath = e.files[0];
			console.log("文件路线",filePath)
            this.readFileApp(filePath);
            resolve();
          },
          fail: (error) => {
            console.error('App 选择文件失败', error);
            uni.showModal({
              title: '提示',
              content: '选择文件失败，请确保已授权文件访问权限'
            });
            this.fileContent = '选择文件失败';
            resolve();
          }
        });
      });
    },

    // App 环境读取文件内容
    readFileApp(filePath) {
		console.log("读取----")
      plus.io.resolveLocalFileSystemURL(filePath, (entry) => {
        entry.file((file) => {
          const fileReader = new plus.io.FileReader();
          fileReader.onload = (evt) => {
            this.fileContent = evt.target.result;
            console.log('App 文件读取成功');
          };
          fileReader.onerror = (error) => {
            console.log('App 文件读取失败', error);
            this.fileContent = `读取失败: ${JSON.stringify(error)}`;
          };
          fileReader.readAsText(file, 'utf-8');
        }, (error) => {
          console.log('App 获取文件对象失败', error);
          this.fileContent = `获取文件失败: ${JSON.stringify(error)}`;
        });
      }, (error) => {
        console.log('App 解析文件路径失败', error);
        this.fileContent = `解析路径失败: ${JSON.stringify(error)}`;
      });
    }
  }
}
</script>

<style>
.content {
  padding: 20px;
}
.result {
  margin-top: 20px;
  word-break: break-all;
}
</style>